package com.rem.hutool.my3Date;

import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.date.Month;

import java.util.Calendar;
import java.util.Date;

/**
 * 日期时间工具
 *
 * @author Rem
 * @date 2020-08-17
 */

public class DateUtilDemo {

    public static void main(String[] args) {


        //dateDifference();


        //partDate();

        //format();

        // parseDate();

        //todayTransition();


    }

    /**
     * 时间差
     */
    private static void dateDifference() {
        String dateStr = "2017-03-01 22:33:23";
        Date date = DateUtil.parse(dateStr);

        //结果：2017-03-03 22:33:23
        Date newDate = DateUtil.offset(date, DateField.DAY_OF_MONTH, 2);
        System.err.println("向后两天:" + newDate);

        //常用偏移，结果：2017-03-04 22:33:23
        DateTime newDate2 = DateUtil.offsetDay(date, 100);
        System.err.println("向后100天:" + newDate2);

        //常用偏移，结果：2017-03-01 19:33:23
        DateTime newDate3 = DateUtil.offsetWeek(date, -3);
        System.err.println("向前3周:" + newDate3);
    }

    /**
     * 获取日期的一部分
     */
    private static void partDate() {
        Date date = DateUtil.date();
        //获得年的部分
        int year = DateUtil.year(date);
        System.err.println(year);
        //获得月份，从0开始计数
        int month = DateUtil.month(date) + 1;
        System.err.println(month);
        //获得月份枚举
        Month month2 = DateUtil.monthEnum(date);
        System.err.println(month2);
        //获得该月的天
        int day = DateUtil.dayOfMonth(date);
        System.err.println(day);
    }

    /**
     * 输出格式转换
     */
    private static void format() {
        String dateStr = "2017-03-01";
        Date date = DateUtil.parse(dateStr);

        //结果 2017/03/01
        String format = DateUtil.format(date, "yyyy/MM/dd");
        System.err.println(format);

        //常用格式的格式化，结果：2017-03-01
        String formatDate = DateUtil.formatDate(date);
        System.err.println(formatDate);

        //结果：2017-03-01 00:00:00
        String formatDateTime = DateUtil.formatDateTime(date);
        System.err.println(formatDateTime);

        //结果：00:00:00
        String formatTime = DateUtil.formatTime(date);
        System.err.println(formatTime);
    }

    /**
     * 时间转换
     * yyyy-MM-dd HH:mm:ss
     * yyyy-MM-dd
     * HH:mm:ss
     * yyyy-MM-dd HH:mm
     * yyyy-MM-dd HH:mm:ss.SSS
     */
    private static void parseDate() {
        String dateStr = "2017-03-01";
        Date date = DateUtil.parse(dateStr);

        DateTime parse = DateUtil.parse(dateStr, "yyyy-MM-dd");
        DateTime parse2 = DateUtil.parse(dateStr, DatePattern.NORM_DATETIME_PATTERN);
    }


    /**
     * 获得当前时间
     */
    private static void todayTransition() {
        //当前时间
        Date date = DateUtil.date();
        System.err.println("当前时间1：" + date);
        //当前时间
        Date date2 = DateUtil.date(Calendar.getInstance());
        System.err.println("当前时间3：" + date2);
        //当前时间
        Date date3 = DateUtil.date(System.currentTimeMillis());
        System.err.println("当前时间3：" + date3);
        //当前时间字符串，格式：yyyy-MM-dd HH:mm:ss
        String now = DateUtil.now();
        System.err.println("当前时间String1：" + now);
        //当前日期字符串，格式：yyyy-MM-dd
        String today = DateUtil.today();
        System.err.println("当前时间String2：" + today);
    }
}
